import javax.swing.text.html.HTMLDocument;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class test {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret = new ArrayList<>();

        //第0行
        List<Integer> list0 = new ArrayList<>();
        list0.add(1);
        ret.add(list0);
        //后面的行
        for (int i = 1; i < numRows; i++) {
            //第一个元素
            List<Integer> curRow = new ArrayList<>();
            curRow.add(1);
            //中间元素
            List<Integer> perRow = ret.get(i-1);//获得上一行数组
            for (int j = 1; j < i; j++) {
                int val1 = perRow.get(j);
                int val2 = perRow.get(j-1);
                curRow.add(val1 + val2);
            }
            //最后一个元素
            curRow.add(1);
            ret.add(curRow);
        }


        return ret;
    }


    public static void main(String[] args) {
        //ArrayList的遍历
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(6);
        list.add(7);
        System.out.println(list);

        //fori
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();

        //foreach
        for (Integer element:
             list) {
            System.out.print(element + " ");
        }
        System.out.println();

        //迭代器iterator
        Iterator<Integer> it = list.iterator();
        while(it.hasNext()){
            System.out.print(it.next() + " ");
        }
        System.out.println();


        //迭代器listIterator（是iterator的子接口，可以实现双向遍历）
        ListIterator<Integer> it2 = list.listIterator(list.size());
        while(it2.hasPrevious()){
            System.out.print(it2.previous() + " ");
        }
        System.out.println();
    }

    public static void main4(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(2);
        System.out.println(list);
        //boolean contains(Object o)  判断o是否在表中
//        System.out.println(list.contains(new Integer(4)));
//        System.out.println(list.contains(new Integer(100)));
//        // int indexOf(Object o)   返回第一个o的下标
//        System.out.println(list.indexOf(new Integer(2)));
//        // int lastIndexOf(Object o)  返回最后一个o的下标
//        System.out.println(list.lastIndexOf(new Integer(2)));
        // List<E> subList(int fromIndex, int toIndex)   截取部分List，左闭右开
        List<Integer> list2 = list.subList(3,5);
        System.out.println(list2);

        list2.set(0,999);

        System.out.println("list" + list);
        System.out.println("list2" + list2);//可以发现对list2的元素更改对list也产生了影响，说明subList方法并没有产生新的对象
    }
    public static void main3(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(2);
        System.out.println(list);
//        E remove(int index)  删除index的值
        list.remove(3);
        System.out.println(list);
//        boolean remove(Object o)  删除遇到的第一个o
        list.remove(Integer.valueOf(2));
        System.out.println(list);
//        E get(int index)     获得index的值
        System.out.println(list.get(2));
//        E set(int index, E element)   更改index的值为element
        list.set(3,1000);
        System.out.println(list);
    }

    public static void main2(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        //boolean add(E e) 尾插e
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        // void add(int index, E element) 在index 插 e
        list.add(1,999);
        System.out.println("list"+list);
        // boolean addAll(Collection<? extends E> c) 尾插c中的元素
        ArrayList<Integer> list2 = new ArrayList<>();
        list2.add(1);
        list2.addAll(list);
        System.out.println("list2:"+list2);
    }

    public static void main1(String[] args) {
       //构造的学习

        //无参
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);

        //有参：参数为initialCapacity
        ArrayList<Integer> List2 = new ArrayList<>();



        ArrayList<Integer> arrayList = new ArrayList<>(3);
        arrayList.add(1);
        arrayList.add(1);
        arrayList.add(1);
        //有参：参数为Collection<? extends E> c
        ArrayList<Integer> List3 = new ArrayList<>(arrayList);
        List3.add(4);
        System.out.println(List3);


        //fori遍历  foreach遍历 直接输出 迭代器
    }




}
